package com.sourcetrip.my.modle;

/**
 * @author: ZhouBert
 * @date: 2020/12/18
 * @description: 红黑树节点
 */
public class RedBlackNode<E> extends TreeNode<E> {

	public Color color;

	/**
	 * 默认红色
	 * 因为在红黑树中，新添加的节点就是红色的。
	 * @param element
	 * @param parent
	 */
	public RedBlackNode(E element, TreeNode<E> parent) {
		super(element, parent);
		color = Color.Red;
	}

	/**
	 * 将本节点染红
	 *
	 * @return
	 */
	public void red() {
		color = Color.Red;
	}

	/**
	 * 将本节点染黑
	 */
	public void black() {
		color = Color.Black;
	}


	/**
	 * 本节点是否为红色
	 *
	 * @return
	 */
	public boolean isRed() {
		return color == Color.Red;
	}

	/**
	 * 本节点是否为黑色
	 * 由于能进来证明 this != null ,所以 不能处理 null 的情况，只能在外面用其他方法进行判断！
	 * @return
	 */
	public boolean isBlack() {
		return color == Color.Black;
	}

	/**
	 * 返回本节点的颜色
	 * @return
	 */
	public Color colorOf(){
		return color;
	}

	public enum Color {
		Red,
		Black
	}

	@Override
	public String toString() {
		String parentString = "null";
		if (this.parent != null) {
			parentString = this.parent.element.toString();
		}
		return this.element + "_p(" + parentString + ")" + "_(" + ((this.color.equals(RedBlackNode.Color.Red)) ? "红" : "黑") + ")";
	}
}
